mod sausage_factory {
pub fn make_sausage() {
println!("sausage!");
}
}
모듈 경로를 참조하는 두가지 방법
crate
로 시작하는 절대경로.self
, super
로 지정하는 상대 경로use를 사용하여 스코프를 지정해줄 수 있다. 그러면 매번 스코프를 앞에 붙이지 않아도 된다.
// An attribute to hide warnings for unused code.
#![allow(dead_code)]
enum Status {
Rich,
Poor,
}
enum Work {
Civilian,
Soldier,
}
fn main() {
// Explicitly `use` each name so they are available without
// manual scoping.
use crate::Status::{Poor, Rich};
// Automatically `use` each name inside `Work`.
use crate::Work::*;
// Equivalent to `Status::Poor`.
let status = Poor;
// Equivalent to `Work::Civilian`.
let work = Civilian;
match status {
// Note the lack of scoping because of the explicit `use` above.
Rich => println!("The rich have lots of money!"),
Poor => println!("The poor have no money..."),
}
match work {
// Note again the lack of scoping.
Civilian => println!("Civilians work!"),
Soldier => println!("Soldiers fight!"),
}
}
모듈은 같은 경로의 파일이거나 mod.rs
파일이 포함된 폴더를 지칭한다.
// main.rs
mod lib;
mod update;
다음과 같은 하위 디렉토리로 모듈을 구성한다고 할 때
src/
ㄴlibs/
ㄴmod.rs
ㄴgame.rs
ㄴui.rs
ㄴmain.rs
libs/mod.rs
는 다음처럼 구성이 가능하다
// libs/mod.rs
// pub은 외부 참조하는 경우
pub mod game;
pub mod ui;
같은 경로 내에서 참조하는 경우 super::
, self::
등의 상대경로를 지칭하는 syntax를 사용한다.
예를 들어 game.rs
에서 ui.rs
를 참조하는 경우 다음처럼 작성 가능하다.
// game.rs
use super::ui::*;
WIP